package Interface;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;

import javax.swing.*;

import org.hibernate.*;
import org.hibernate.criterion.Restrictions;

import utils.HibernateUtil;

import Entities.Categorie;
import Entities.Liste;
import Entities.Model;
import Entities.User_has_list;
import Entities.Users;
import Interface.Accueil.BtnAction;
import Language.Language;

public class AjoutListe extends JFrame {

	protected JComboBox ListeItem;
	protected JPanel pnlConteneur_main;
	protected JButton btnValider;
	protected JComboBox cmbCategorie, cmbSousCategorie;
	protected JLabel lblTitreListe, lblTagListe, lblDescriptionListe;
	protected JTextField txtTitreListe;
	protected JTextArea txtTagListe, txtDescriptionListe;
	protected JScrollPane ascenseur, ascenseur2;

	// Utilisateur courant
	protected Users userC;

	private String [] liste, categorie;

	public AjoutListe(String titre, Users user) {
		super(titre);

		//Utilisateur courant
		userC = user;

		// Recuperation de la liste de liste
		Session session = HibernateUtil.currentSession();
		Criteria criteria = session.createCriteria(Model.class);
		criteria.add(Restrictions.eq("islist",1));
		List TypeListe = criteria.list();

		liste = new String[TypeListe.size()];
		int count = 0;
		for (Iterator it = TypeListe.iterator() ; it.hasNext();)
		{
			Model m = (Model) it.next();
			liste[count] = m.getLibelle_fr();
			count ++;
		}

		// Recuperation de la liste de categorie
		Criteria criteria1 = session.createCriteria(Categorie.class);
		List TypeCategorie = criteria1.list();

		categorie = new String[TypeCategorie.size()];
		int count1 = 0;
		for (Iterator it = TypeCategorie.iterator() ; it.hasNext();)
		{
			Categorie m = (Categorie) it.next();
			categorie[count1] = m.getTitle_fr();
			count1 ++;
		}

		// Conteneur principale
		pnlConteneur_main = (JPanel) new JPanel(); 
		pnlConteneur_main.setLayout(new GridBagLayout());
		GridBagConstraints contraintes = new GridBagConstraints();

		// Ajout combobox liste 
		ListeItem = new JComboBox(liste);
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 0; // ligne 0
		contraintes.gridwidth = 3; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(ListeItem, contraintes);

		// Combobox de categorie
		cmbCategorie = new JComboBox(categorie);
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 1; // ligne 0

		contraintes.gridwidth = 3; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 6; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(pnlConteneur_center, contraintes);
		

		contraintes.gridwidth = 3; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(cmbCategorie, contraintes);

		// Combobox de sous categorie
		/*cmbSousCategorie = new JComboBox();
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 2; // ligne 0
		contraintes.gridwidth = 3; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(cmbSousCategorie, contraintes);*/

		// label titre liste
		lblTitreListe = new JLabel(Language.getAnInternationalizeString("addListe_lblTitreListe"));
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 3; // ligne 0
		contraintes.gridwidth = 1; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(lblTitreListe, contraintes);

		// texte titre liste
		txtTitreListe = new JTextField();
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 1; // colonne 0 
		contraintes.gridy = 3; // ligne 0
		contraintes.gridwidth = 2; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(txtTitreListe, contraintes);

		// label tag liste
		lblTagListe = new JLabel(Language.getAnInternationalizeString("addListe_lblTagListe"));
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 4; // ligne 0
		contraintes.gridwidth = 1; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(lblTagListe, contraintes);

		// Textarea tag liste
		txtTagListe = new JTextArea(5, 20);
		ascenseur = new JScrollPane(txtTagListe);
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 1; // colonne 0 
		contraintes.gridy = 4; // ligne 1 
		contraintes.gridwidth = 2; // le composant s'etend sur 1 colonne
		contraintes.gridheight = 3; // le composant s'etend sur 3 lignes
		pnlConteneur_main.add(ascenseur, contraintes);

		// label Description liste
		lblDescriptionListe = new JLabel(Language.getAnInternationalizeString("addListe_lblDescriptionListe"));
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 7; // ligne 0
		contraintes.gridwidth = 1; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(lblDescriptionListe, contraintes);

		// Textarea description liste
		txtDescriptionListe = new JTextArea(5, 20);
		ascenseur2 = new JScrollPane(txtDescriptionListe);
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 1; // colonne 0 
		contraintes.gridy = 7; // ligne 1 
		contraintes.gridwidth = 2; // le composant s'etend sur 1 colonne
		contraintes.gridheight = 3; // le composant s'etend sur 3 lignes
		pnlConteneur_main.add(ascenseur2, contraintes);

		// bouton valider
		btnValider = new JButton(Language.getAnInternationalizeString("addListe_btnValider"));
		contraintes.fill = GridBagConstraints.HORIZONTAL;
		contraintes.anchor = GridBagConstraints.NORTH;
		contraintes.weightx = 1.0;
		contraintes.weighty = 1.0;
		contraintes.gridx = 0; // colonne 0 
		contraintes.gridy = 10; // ligne 0
		contraintes.gridwidth = 3; // le composant s'etend sur 1 colonne 
		contraintes.gridheight = 1; // le composant s'etend sur 1 ligne
		pnlConteneur_main.add(btnValider, contraintes);
		btnValider.addActionListener(new BtnAction());

		// Ajout du panel
		this.add(pnlConteneur_main);

		// Taille de la fenetre
		this.setSize(500,450);
		this.setVisible(true);
		Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
		this.setLocation((screen.width - this.getSize().width)/2,(screen.height - this.getSize().height)/2);

	}

	class BtnAction implements ActionListener {

		public void actionPerformed(ActionEvent evt) {
			if(evt.getSource() == btnValider) {
				Session session = HibernateUtil.currentSession();
				Transaction tx = session.beginTransaction();

				//Insertion dans list
				Liste l = new Liste();
				l.setTag(txtTagListe.toString());
				l.setDescription(txtDescriptionListe.toString());
				l.setTitle(txtTitreListe.toString());
				session.save(l);
				tx.commit();
				
				// insertion dans User_has_list
				User_has_list Uhl = new User_has_list();
				Uhl.setList_idList(l.getIdList());
				Uhl.setUser_idUser(userC.getIdUser());
				session.save(Uhl);
				tx.commit();
				HibernateUtil.closeSession();
			}
		}               
	}	

}
